//
//  HMHomeTableViewController.swift
//  Weibo
//
//  Created by 米易雅克 on 16/4/8.
//  Copyright © 2016年 米易雅克. All rights reserved.
//

import UIKit
import SVProgressHUD
import SVPullToRefresh
class HMHomeTableViewController: HMBaseTableViewController {

//MARK: 懒加载
    //刷新控件
    private lazy var pullDownRefreshControl: HMPullDownRefreshController = HMPullDownRefreshController()
    
    private let ReuseIdentifier = "ReuseIdentifier"
    
    //微博数据模型
    var statuses: [HMStatus]? {
        didSet {
        //只要微博数据改变就刷新数据
            HMPrint("总的微博数据:\(statuses?.count)")
            self.tableView.reloadData()
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !HMUserAccountViewModel.sharedInstance.userLogin {
            HMPrint("没有登陆不能进行下一步操作")
            return
        }
        prepareNavBarUI()
        prepareTableView()
       
    }
    private func prepareTableView() {
        
        //注册cell
        tableView.registerClass(HMStatusCell.self, forCellReuseIdentifier: ReuseIdentifier)
        //去掉tableView分割线//SingleLineEtched
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        //设置cell行高自动设置
        tableView.rowHeight = UITableViewAutomaticDimension
        //预估行高
        tableView.estimatedRowHeight = 200
        
        
        //添加下拉刷新控件
        tableView.addSubview(pullDownRefreshControl)
        //03准备刷新的闭包
        pullDownRefreshControl.pullDownRefreshHandler = {
            
//            HMPrint("控制器开始下拉刷新")
//            dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), {
//                HMPrint("下拉刷新完成，获得数据")
//                //让刷新控件完成刷新，切换到Nromal
//                self.pullDownRefreshControl.endRefreshing()

//        })
            HMPrint("控制器开始下拉刷新")
            self.loadNewStatus()
        }
        //让控制器进入刷新状态
        pullDownRefreshControl.startRefreshing()
        
//MARK: 上拉刷新
//        tableView.addInfiniteScrollingWithActionHandler {
//        HMPrint("上拉加载更多数据")
//        self.loadMoreStatus()
        
        
//        }
    }
    
    //上拉刷新
    
    private func loadMoreStatus() {
    //获取最小id
        let max_id = self.statuses?.last?.id ?? 0
        
        //如果没有一条微博，就不去加载更多数据
        if max_id == 0 {
            HMPrint("没有微博数据，不能上拉")
            return
        }
        
        //加载更早之前的微博
        HMStatusViewModel.sharedInstance.loadStatus(0, max_id: max_id) { (statuses, error) in
            self.tableView.infiniteScrollingView.stopAnimating()
            
            if error != nil {
            HMPrint("上拉加载数据失败:\(error)")
                return
            }
            let count = statuses?.count ?? 0
            HMPrint("加载更多数据:\(count)")
            
            if count == 0 {
                //没有加载更多数据
                HMPrint("没有加载更多数据")
                SVProgressHUD.showErrorWithStatus("没有加载更多数据")
                return
            }
            //拼接数据，老的数据拼接到现有数据之后
            let s = self.statuses! + statuses!
            self.statuses = s
        }
        
    }
    //加载新微博模型数据
    private func loadNewStatus() {
    // 获取ID最大的微博, 第一条微博就是ID最大的微博, 当第一次进入刷新,一条微博都没有id = 0, 加载最新20条
        let since_id = self.statuses?.first?.id ?? 0
        
    //加载数据，准备闭包，传递给loadStatus的loadStatusCallback
       HMStatusViewModel.sharedInstance.loadStatus(since_id, max_id: 0) { (statuses, error) in
        
        //加载数据完成后让刷新控件完成刷新
        self.pullDownRefreshControl.endRefreshing()
        
        if error != nil {
        HMPrint("获取微博 数据失败:\(error)")
        SVProgressHUD.showErrorWithStatus("您的网络不给力...")
        return
        }
        //判断返回数据的数量
        let count = statuses?.count ?? 0
        HMPrint("加载微博数据:\(count)")
        
        //如果是第一次加载20条，不需要要显示
        if since_id != 0 {
        //用户手动拖拽，显示下拉刷新的条数
            self.showTipLabel(count)
        
        }
        if count == 0 {
        HMPrint("没有数据")
         
            if since_id == 0 {
                SVProgressHUD.showErrorWithStatus("没有加载到微博数据")
            }
            return
        }
    //加载微博成功，将微博数据保存起来，让tableView去显示
        //判断，如果since_id ＝ 0
        if since_id == 0 {
            self.statuses = statuses
            
            //第一次进来tableview没有数据since_ID＝ 0,加载最新20条，有数据后才添加上拉加载更多这个功能
            self.tableView.addInfiniteScrollingWithActionHandler({ 
                //上拉加载数据
                self.loadMoreStatus()
                
            })
        } else {
            //如果since_id != 0，将返回的数据拼接到现有数据前面
            //数组直接使用加号拼接
            let s = statuses! + self.statuses!
            
            //将拼接好的数据赋值给self.statuses
            self.statuses = s
        }
        }
    }
    
    //显示下拉数据提示
    //count: 更新数据的条数
    private func showTipLabel(count: Int) {
    
//        let label = UILabel(fontSize: 14, textColor: UIColor.whiteColor())
//        let TipLabelHeight: CGFloat = 44
//        label.backgroundColor = UIColor.orangeColor()
//        label.textAlignment = NSTextAlignment.Center
        //label 放到导航栏里 main，y ＝ － （状态栏的高度＋自己的高度）
        let y = -(UIApplication.sharedApplication().statusBarFrame.height + TipLabelHeight)
        tipLabel.frame = CGRect(x: 0, y: y, width: UIScreen.mainScreen().bounds.width, height: TipLabelHeight)
        tipLabel.text = count == 0 ? "没有新的微博的数据" : "下拉刷新了\(count)条微博数据"
        
        //添加到导航栏上面，addsubview在最上面
        //insertsubview(label, atindex: 0)跑到最底层
        // 快速拖动,会发现动画还没有完成,又来一个动画,动画叠加
        // UIView动画,底层其实也是核心动画
        /// 获取layer上面正在执行动画的key
        HMPrint("label.text:\(tipLabel.text)")
//        navigationController?.navigationBar.insertSubview(tipLabel, atIndex: 0)
        
        //动画
                   //uiview动画，反过来执行
//            UIView.setAnimationRepeatAutoreverses(true)
            //uiview动画重复执行
//            UIView.setAnimationRepeatCount(5)
            if let keys = tipLabel.layer.animationKeys() {
                HMPrint("正在执行动画，keys:\(keys)")
                return
            }
        UIView.animateWithDuration(1, animations: {
            
            self.tipLabel.frame = CGRect(x: 0, y: TipLabelHeight, width: UIScreen.mainScreen().bounds.width, height: TipLabelHeight)
            }) { (_) in
                
                //停一会在动画到屏幕上面去
                //返回回去的动画
                UIView.animateWithDuration(1, delay: 0.5, options: [], animations: {
                    self.tipLabel.frame = CGRect(x: 0, y: -(UIApplication.sharedApplication().statusBarFrame.height + TipLabelHeight), width: UIScreen.mainScreen().bounds.width, height: TipLabelHeight)
                    }, completion: { (_) in
                        HMPrint("动画完成了")
//                        self.tipLabel.removeFromSuperview()
                })
           
        }
    
    }
 //MARK: 下拉刷新数量label
    private lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 14, textColor: UIColor.whiteColor())
//        let TipLabelHeight: CGFloat = 44
        label.backgroundColor = UIColor.orangeColor()
        label.textAlignment = NSTextAlignment.Center
        //只添加一次
        self.navigationController?.navigationBar.insertSubview(label, atIndex: 0)
        
        return label
        
    }()
    
    
//设置导航栏左右item
    private func prepareNavBarUI(){
        
    navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: #selector(HMHomeTableViewController.didClickLeftButton(_:)))
    navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: #selector(HMHomeTableViewController.didClickRigtbutton(_:)))
    
//        根据用户accessToken获取用户名字
        let name = HMUserAccountViewModel.sharedInstance.userAccount?.screen_name ?? "没有名称"
        
//    自定义导航条中间 title
        let titleButton  = HMHomeTitleButton(title: name)
        titleButton.addTarget(self, action: #selector(HMHomeTableViewController.didClickTitleButton(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        navigationItem.titleView = titleButton
    }
    
   @objc private func didClickLeftButton(button : UIButton){
    
        HMPrint("button:\(button)")
    }
    
    @objc private func didClickRigtbutton(button: UIButton){
    
    HMPrint("button:\(button)")
    
    }
//    点击hometitlebutton事件
    
  @objc private func didClickTitleButton(button: UIButton){
//    设置按钮选中状态
    button.selected = !button.selected
    
        UIView.animateWithDuration(HMDefaultAnimationDur) {
            button.imageView?.transform = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI-0.01)) : CGAffineTransformIdentity
        }
        
    }
    
    
    }

        // MARK: - Table view data source
extension HMHomeTableViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return self.statuses?.count ?? 0
    }
    

   
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(ReuseIdentifier, forIndexPath: indexPath) as! HMStatusCell

        cell.status = self.statuses?[indexPath.row]

        return cell
    }
    
    //cell行高方法不设置行高
    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return false
    }
}


    